package com.quanyan.stadium.service.commonComponent;

import com.quanyan.stadium.api.req.ReqRecordGameScheduleResult;
import com.quanyan.stadium.entity.TbGameEvent;
import com.quanyan.stadium.entity.TbGameRound;
import com.quanyan.stadium.entity.TbGameSchedule;

import java.util.List;

/**
 * Created by xiao.xiao on 2016/7/21.
 *
 * 运动场,赛事相关的 MQ 集合
 */
public interface GameMQProduct {

    /**********——————————————————————外部MQ 消息 ——————————————————————————**********/

    /**
     *  俱乐部创建赛事,发给   [用户中系统]
     *
     * */
    void clubCreateGameToUserCenterMQ(TbGameEvent tbGameEvent, Integer uid);
    /**
     * 用户录入比分发送MQ消息, 发送MQ消息给   [用户中心]
     * */
    void userRecordScoreMQ(ReqRecordGameScheduleResult req, Integer uid);

    /**
     * 每一轮结束, 发送MQ消息给   [用户中心]
     * */
    void gameScheduleWinUserMQ(List<Integer> uids, TbGameEvent tbGameEvent, TbGameRound tbGameRound);

    /**
     *  俱乐部创建积分赛  [俱乐部系统]
     *
     * */
    void clubCreateGameToClubMQ(TbGameEvent tbGameEvent, Integer uid, Integer clubId);

    /**
     *  勋章发放(个人): 每一轮结束胜利者用户,发放胸章, 发送给 [用户中心系统]
     *
     * */
    void gameScheduleWinUserMedalMQ(Integer categoryId, List<Integer> uids);

    /**
     *  勋章发放(俱乐部级别): 统计俱乐部胜利多少次以后,开始推动俱乐部级别消息   [俱乐部系统]
     *
     * */
    void gameScheduleWinClubMedalMQ(Integer categoryId, List<Integer> clubIds);

    /**
     *  勋章发放(俱乐部级别, 赛事结束以后开始触发这个条件): 根据俱乐部参加赛事的次数推送  [俱乐部系统]
     *
     * */
    void clubJoinOfficialGameNumClubMedalMQ(Integer categoryId, List<Integer> clubIds);






    /**********————————————————————内部部MQ 消息 ————————————————————————————————————————————**********/

    /**
     * 每一轮开始,初始化用户个人赛程信息
     * */
    void userScheduleInitMQ(TbGameEvent tbGameEvent, TbGameRound currentGameRound);

    /**
     * 更新轮次发送MQ消息
     * */
    void userScheduleUpdateMQ(TbGameSchedule tbGameSchedule, TbGameRound tbGameRound);

    /**
     * 每一轮结束,完善用户个人赛程信息
     * */
    void userScheduleFinishMQ(TbGameEvent tbGameEvent, TbGameRound preTbGameRound);

    /**
     * 每一轮结束,评级积分消息推送
     * */
    void gameScheduleEndScoreGradeMQ(TbGameEvent tbGameEvent, TbGameRound preTbGameRound);

    /**
     * 每一轮结束,用户雷达图消息更新
     * */
    void gameScheduleEndRadarChartMQ(TbGameEvent tbGameEvent, TbGameRound preTbGameRound);

    /**
     * 每一轮结束, 发起通知 ,然后调起一些系统推送
     * */
    void gameScheduleEndRemindPushMsgMQ(TbGameEvent tbGameEvent, TbGameRound preTbGameRound);
    /**
     * 官方赛事结束,初始化排名分数和一些MQ消息
     * */
    void gameEventFinish(TbGameEvent tbGameEvent, TbGameRound curTbGameRound);
    /**
     * 官方赛事结束,初始化积分完毕,开始计算推送相关信息
     * */
    void gameEventFinishStartPushMsgMQ(TbGameEvent tbGameEvent);

    /**
     * 官方赛事结束,初始化积分完毕,开始进行数据汇总
     * */
    void gameEventFinishStartCollectMsgMQ(TbGameEvent tbGameEvent);

    /**
     * 官方赛事结束,初始化积分完毕,积分累加
     * */
    void gameEventFinishCumsumScoreMQ(TbGameEvent tbGameEvent);

    /**
     * 官方赛事结束,初始化积分完毕,栏目积分消息推送
     * */
    void gameEventFinishScoreCategoryMQ(TbGameEvent tbGameEvent);

    /**
     * 报名相关消息推送
     */
    //void gameScheduleEndRemindPushMsgMQ(TbGameEvent tbGameEvent, TbGameRound preTbGameRound);

}
